package com.smag.system.service;

import com.smag.common.core.domain.AjaxResult;
import com.smag.common.core.domain.TreeSelect;
import com.smag.common.core.domain.entity.FarmCategory;

import java.util.List;

/**
* @author hzqhzq
* @description 针对表【farm_category(分类表)】的数据库操作Service
* @createDate 2023-04-02 15:56:14
*/
public interface FarmCategoryService {

    AjaxResult listAllCategory();

    AjaxResult getCategoryList();

    AjaxResult selectAllCategory();

    AjaxResult selectAllCategoryChildren();

    /**
     * 查询种类
     * @param id 种类主键
     * @return 种类
     */
    public FarmCategory selectFarmCategoryById(Long id);

    /**
     * 查询种类列表
     * @param farmCategory 种类
     * @return 种类集合
     */
    public List<FarmCategory> selectFarmCategoryList(FarmCategory farmCategory);

    /**
     * 校验种类是否有数据权限
     *
     * @param id 种类id
     */
    public void checkCategoryDataScope(Long id);

    /**
     * 校验种类名称是否唯一
     *
     * @param category 种类信息
     * @return 结果
     */
    public boolean checkCategoryNameUnique(FarmCategory category);

    /**
     * 新增种类
     * @param farmCategory 种类
     * @return 结果
     */
    public int insertFarmCategory(FarmCategory farmCategory);

    /**
     * 是否存在种类子节点
     *
     * @param id 种类ID
     * @return 结果
     */
    public boolean hasChildCategoryById(Long id);
    //  public boolean hasChildCategoryById(Long ids);

    /**
     * 查询种类是否存在用户
     *
     * @param id 种类ID
     * @return 结果 true 存在 false 不存在
     */
    public boolean checkCategoryExistCrop(Long id);
    //boolean checkCategoryExistCrop(Long ids);

    /**
     * 修改种类
     *
     * @param farmCategory 种类
     * @return 结果
     */
    public int updateFarmCategory(FarmCategory farmCategory);

    /**
     * 批量删除种类
     *
     * @param ids 需要删除的种类主键集合
     * @return 结果
     * public int deleteFarmCategoryByIds(Long ids);
     */

    /**
     * 删除种类信息
     *
     * @param id 种类主键
     * @return 结果
     */
    public int deleteFarmCategoryById(Long id);

    void updateFarmCategoryChildren(Long id, String newAncestors, String oldAncestors);




    /**
     * 查询种类管理数据
     * @param farmCategory
     * @return
     */
    List<FarmCategory>  selectCategoryList(FarmCategory farmCategory);




    /**
     * 查询种类树结构信息
     *
     * @param category 种类信息
     * @return 种类树信息集合
     */
    public List<TreeSelect> selectCategoryTreeList(FarmCategory category);
    /**
     * 构建前端所需要树结构
     *
     * @param categorys 种类列表
     * @return 树结构列表
     */
    public List<FarmCategory> buildCategoryTree(List<FarmCategory> categorys);
    /**
     * 构建前端所需要下拉树结构
     *
     * @param categorys 种类列表
     * @return 下拉树结构列表
     */
    public List<TreeSelect> buildCategoryTreeSelect(List<FarmCategory> categorys);
    /**
     * 根据作物查询种类树信息
     *
     * @param  cropId 作物ID
     * @return 选中种类列表
     */
      public List<Long> selectCategoryListByCropId(Long cropId);

    /**
     * 根据ID查询所有子种类（正常状态）
     *
     * @param id 种类ID
     * @return 子种类数
     */
    public int selectNormalChildrenCategoryById(Long id);


    AjaxResult getRootCategoryList();
}
